import axios from 'axios'

// 封装的 Axios 类
export class AxiosWrapper {
  instance

  constructor(config) {
    this.instance = axios.create(config)

    // 添加请求拦截器
    this.instance.interceptors.request.use(
      (config) => {
        // 在这里添加认证令牌等
        config.headers['X-Access-Token'] = AxiosWrapper.getHashSearchParam('token')
        return config
      },
      (error) => {
        return Promise.reject(error)
      },
    )

    // 添加响应拦截器
    this.instance.interceptors.response.use(
      (response) => {
        // 在这里处理响应数据
        return response
      },
      (error) => {
        return Promise.reject(error)
      },
    )
  }

  // 封装的 get 方法
  get(url, config) {
    return this.instance.get(url, config).then((res) => res.data)
  }

  // 封装的 post 方法
  post(url, data, config) {
    return this.instance.post(url, data, config).then((res) => res.data)
  }

  // 其他方法
  static searchParamCache = {}
  static getHashSearchParam(key) {
    if (key in AxiosWrapper.searchParamCache && AxiosWrapper.searchParamCache[key]) {
      return AxiosWrapper.searchParamCache[key]
    }
    const url = location.href
    const hash = url.substring(url.indexOf('#') + 1)
    const searchIndex = hash.indexOf('?')
    const search = searchIndex !== -1 ? hash.substring(searchIndex + 1) : ''
    const usp = new URLSearchParams(search)
    const result = usp.get(key)
    AxiosWrapper.searchParamCache.key = result
    return result
  }
}

// 创建封装的 Axios 实例
const request = new AxiosWrapper({
  baseURL: '/jeecg-boot',
  timeout: 10000,
})

// 使用封装的实例
// axiosWrapper.get('/endpoint').then((response) => {
//   console.log(response.data)
// })

export default request
